From 49bf3cdba8b779d36ad776379921204b2387a02e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Steve=20Fr=C3=A9cinaux?= Date: Mon, 20 Jan 2014 09:32:37 +0100 Subject: [PATCH] GtkStack: add gtk_stack_get_child_by_name() This new method allows getting a widget from a GtkStack when we know its name, and will also return NULL if there is no widget going by that name. Usage example would be to check if a child with a given name exists before calling gtk_stack_set_visible_child_name(). https://bugzilla.gnome.org/show_bug.cgi?id=722588 --- gtk/gtkstack.c | 34 ++++++++++++++++++++++++++++++++++ gtk/gtkstack.h | 3 +++ 2 files changed, 37 insertions(+) diff --git a/gtk/gtkstack.c b/gtk/gtkstack.c index 1c61192df7..f158d134e5 100644 --- a/gtk/gtkstack.c +++ b/gtk/gtkstack.c @@ -1133,6 +1133,40 @@ gtk_stack_remove (GtkContainer *container, gtk_widget_queue_resize (GTK_WIDGET (stack)); } +/** + * gtk_stack_get_child_by_name: + * @stack: a #GtkStack + * @name: the name of the child to find + * + * Finds the child of the #GtkStack with the name given as + * the argument. Returns %NULL if there is no child with this + * name. + * + * Return value: (transfer none): the requested child of the #GtkStack + * + * Since: 3.12 + */ +GtkWidget * +gtk_stack_get_child_by_name (GtkStack *stack, + const gchar *name) +{ + GtkStackPrivate *priv = gtk_stack_get_instance_private (stack); + GtkStackChildInfo *info; + GList *l; + + g_return_val_if_fail (GTK_IS_STACK (stack), NULL); + g_return_val_if_fail (name != NULL, NULL); + + for (l = priv->children; l != NULL; l = l->next) + { + info = l->data; + if (info->name && strcmp (info->name, name) == 0) + return info->widget; + } + + return NULL; +} + /** * gtk_stack_set_homogeneous: * @stack: a #GtkStack diff --git a/gtk/gtkstack.h b/gtk/gtkstack.h index d0bb47188a..edecf7f5a3 100644 --- a/gtk/gtkstack.h +++ b/gtk/gtkstack.h @@ -79,6 +79,9 @@ void gtk_stack_add_titled (GtkStack GtkWidget *child, const gchar *name, const gchar *title); +GDK_AVAILABLE_IN_3_12 +GtkWidget * gtk_stack_get_child_by_name (GtkStack *stack, + const gchar *name); GDK_AVAILABLE_IN_3_10 void gtk_stack_set_visible_child (GtkStack *stack, GtkWidget *child); -- 2.30.2